package cgroups

import (
	"golang.org/x/sys/unix"
	"os"
	"sync"
)

// cgroup 统一挂载点
const unifiedMountPoint = "/sys/fs/cgroup"

var (
	isUnifiedOnce sync.Once
	isUnified     bool
)

// IsCgroup2UnifiedMode 检查系统是否正在 cgroup v2 模式
func IsCgroup2UnifiedMode() bool {
	isUnifiedOnce.Do(func() {
		var st unix.Statfs_t                       // st 存储文件系统的状态
		err := unix.Statfs(unifiedMountPoint, &st) // 对 cgroup v2 的挂载点进行状态统计
		if err != nil && os.IsNotExist(err) {
			isUnified = false
			return
		}
		// 如果没有错误，检查文件系统的类型是否为 cgroup2
		isUnified = st.Type == unix.CGROUP2_SUPER_MAGIC
	})
	return isUnified
}
